//
//  FirstViewController.m
//  07-UIDelegate-Block
//
//  Created by dllo on 16/7/22.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import "FirstViewController.h"
#import "SecondViewController.h"

@interface FirstViewController () <SecondVCPassValue>
@property (nonatomic, strong) UILabel *titleLabel;
@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
  //关于BaseViewController
  //时基类的ViewController
  //在这个Controller中， 进行统一的修改
  //例如： 统一修改坐标系， 统一修改背景色
   //统一修改navgation barTinColor Tincolor
    
    
    
    
    
    
    // Do any additional setup after loading the view.
//    self.navigationController.navigationBar.translucent = NO;
//    self.edgesForExtendedLayout = UIRectEdgeNone;
    self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 10, 300, 50)];
    
    self.titleLabel.text = @"哦亲亲呃呃";
    [self.view addSubview:self.titleLabel];
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(0, 100, 200, 60);
    [button setTitle:@"点我跳下一页" forState: UIControlStateNormal];
    [button addTarget:self action:@selector(pushToNextVC:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:button];
    //界面通信
    //1.属性传值， 一般常用于 从前往后传值
    // 将想要传递的值， 作为后一个页面的属性， 并通过该属性进行一系列的操作
    //  将FirstViewController 的titleLabel.text传递给SecondViewController 的textField
    //        ⬇️ push               ⬇️ 属性传值
    // SecondViewController －》 titleString －》 去使用titleString做任意事情
    
    
  //从后往前传值， （可以， 但是不推荐这样使用）
    //  将SecondViewController 的textField.text传递给FirstViewController 的label
    //        ⬇️ pop (获取当前First 的VC)     ⬇️ 属性传值
    // SecondViewController －》      titleTextField －》 去使用titleString做任意事情

    
    
  //2. 协议传值 （delegate）
  // 从后往前传值
  // Second －》 First
  // 决定要用代理的方式传值
  // 1.决定要在Second中声明协议 （最难确定）要给Second声明协议
  // 2. 声明delegate @property (nonatomic, weak) id<SecondVCPassValue> delegate;
  // 3.  在哪签协议 （只要可以拿到对象， 就可以签订协议）
//  xxx.delegate = self
  // 4.xxx.delegate = self 会报黄 ， 没签订协议， 签订协议
  // 5. 签订完协议， 会报黄， 应为友必须实现的协议方法未实现
   // 实现协议方法
   //6. 但是协议方法没有执行， 却少触发时机
   // 在哪里触发该协议方法 （加上对应得判断）

 // 3.关于navgation中控制器的释放
  // navgation中viewControllers数组， 数组对对象有引用计数加一
  // 当controller入栈时，则被加入数组中， 引用计数 ＋ 1
  // 只要不出栈， 就不会释放
  // A－> push -> B
  // B -> pop -> A B 出栈， 对应释放 
    
}
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:YES];
    NSLog(@"%@", _titletextField);
}

- (void)pushToNextVC:(UIButton *)button {
    SecondViewController *second = [[SecondViewController alloc] init];
    second.titleString = _titleLabel.text;
    
#warning 指定代理人 （这个时候SecondViewController才刚创建出来）
    second.delegate = self;
    [self.navigationController pushViewController:second animated:YES];
}
#warning 实现协议方法
- (void)passValue:(NSString *)string {
    NSLog(@"%@", string);
    
}








- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    // Get the new view controller using [segue destinationViewController].
    // Pass the selected object to the new view controller.
}
*/

@end
